#pragma once
#include<iostream>
#include<functional>

typedef std::function<int(int,int)>func_t;
class Task
{
public:
    Task(){}
    Task(int x,int y,func_t callback)
    :_x(x),_y(y)
    ,_func(callback)
    {

    }
    size_t operator()(){
        return _func(_x,_y);
    }
private:
    int _x;
    int _y;
    func_t _func;
};

// using func_t = std::function<void(int ,const uint16_t&,const std::string&,const std::string&)>;

// class Task
// {
// public:
//     Task(){}
//     Task(int sock,uint16_t port,std::string ip,func_t callback)
//     :_sock(sock),_port(port),_ip(ip)
//     {

//     }
//     //这里的构造函数已经将变量赋值完成了
//     void operator()(const std::string name)
//     {
//         _func(_sock,_port,_ip,name);
//     }
// public:
//     int _sock;
//     uint16_t _port;
//     std::string _ip;
//     func_t _func;
// };
// //这里的包装函数需要指明具体的套接字和具体的进程
// //using func_t = std::function<void(int,const std::string& ,const uint16_t&,const std::string&)>;

// // class Task
// // {
// // public:
// //     Task(){

// //     }
// //     Task(int sock,const std::string ip,uint16_t port,func_t callback)
// //     :_sock(sock),_ip(ip),_port(port),_func(callback)
// //     {

// //     }
// //     void operator()(const std::string name)
// //     {
// //         _func(_sock,_ip,_port,name);
// //     }
// // public:
// //     int _sock;
// //     std::string _ip;
// //     uint16_t _port;
// //     func_t _func;
// // };